package com.hint.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;

import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * workID配置器，给分库分表的雪花算法workId使用， 在各微服务pom.xml的mysql配置末尾那块
 */
@Configuration
@Slf4j
public class SnowFlakeWordIdConfig {


    /**
     * 动态指定sharding jdbc 的雪花算法中的属性work.id属性
     * 通过调用System.setProperty()的方式实现,可用容器的 id 或者机器标识位
     * workId最大值 1L << 100，就是1024，即 0<= workId < 1024
     * {@link SnowflakeShardingKeyGenerator#getWorkerId()}
     *
     *
     * 用static代码块是因为要注入到系统参数中，所以直接先执行
     */
    static {

        try {
            InetAddress inetAddress = Inet4Address.getLocalHost();

            // 获取当前系统ip
            String hostAddressIp = inetAddress.getHostAddress();

            String workId = Math.abs(hostAddressIp.hashCode()) % 1024+"";

            // 设置系统参数，workId的值，这个名字自己随便起，但对应服务的pom.xml中要去workId的值，要对上
            System.setProperty("workId",workId);
//            System.setProperty("logging.level.root","sss");
            log.info("workId:{}",workId);

        } catch (UnknownHostException e) {
            e.printStackTrace();
        }


    }




//    public static void main(String [] args){
//
//        InetAddress inetAddress = null;
//        try {
//            inetAddress = Inet4Address.getLocalHost();
//        } catch (UnknownHostException e) {
//            e.printStackTrace();
//        }
//        System.out.println(inetAddress.getHostAddress());
//        System.out.println(inetAddress.getHostName());
//
//    }


}
